package cn.cjxy.web.servlet.forward;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *
 * 转发与重定向实现的功能是相同的，用于从一个页面跳转到另一个页面。但是从内部细节上有很大的不同；
 * 转发:
 *      ● 由服务器进行的页面跳转，因此也叫服务器内部转发；
 *      客户端访问资源/demo01，服务器发现客户端想要的资源不在/demo01于是自己将请求转发到/demo02，这个过程客户端无感知；客户端只请求了一次；
 *      转发相关的方法
 *      1）首先获取转发器（分发器）request.getRequestDispatcher("/转发的地址")
 *      2）使用转发器的forward方法进行转发
 * 重定向：
 *      客户端根据服务器反馈的信息再次请求服务器；
 *      重定向的方法
 *      ● response.sendRedirect("访问的地址")
 * 二者区别：
 *      区别	    转发	                            重定向
 *      根目录	采用服务器根目录：/02_request/	    采用客户端根目录：http://localhost:8080/
 *      客户端地址栏	不会变化                    	会
 *      哪里跳转	由服务器进行的跳转	                 由客户端浏览器进行的跳转
 *      请求域	不会丢失数据	                    会，因为不是同一次请求
 * @author huangjie
 * @date 2025/9/26
 */
@WebServlet("/demo1")
public class Demo1  extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute("user","jack");
        resp.sendRedirect("/demo2");
    }
}
